home *** CD-ROM | disk | FTP | other *** search
/ Amiga CD-Sensation: Golden Games / Amiga CD-Sensation - Ausgabe 2 - Golden Games (1996)(GTI - Schatztruhe)(DE)[!].iso / Adventurer's / MechFight / EDITOR / MF.c < prev    next >
C/C++ Source or Header  |  1990-08-31  |  36KB  |  1,734 lines

  1. #include "devices/audio.h"
  2. extern char *LoadSound();
  3. extern int FreeSound();
  4. extern struct IOAudio *StartSound();
  5. extern int StopSound();
  6. extern int rand();
  7. #include "obj.h"
  8.  
  9. #define COMM 20 /* Anzahl der möglichen "fighters" (number of fighters) */
  10. #define MTEXT 300 /* Anzahl der Inschriften */
  11. #define IMAX 70
  12. #define ITM 200
  13.  
  14. unsigned char ox[200]; /* X-Koordinaten der bewegten Objekte */
  15. unsigned char oy[200]; /* Y-Koordinaten der bewegten Objekte */
  16. unsigned char oh[200]; /* Hintergrund der bewegten Objekte   */
  17. unsigned char oz[200]; /* Wann kommen die Objekte immer dran?*/
  18. unsigned char oj[200]; /* Worüber kommen die Objekte ? */
  19. unsigned char oa[200]; /* Zeichen für das Objekt */
  20. unsigned char ou[200]; /* Grundzeichen =0,bei Objekten, die nicht "richten" */
  21. unsigned int heat[200];/* Energie der einzelnen Objekte (früher mal heat) */
  22. unsigned int aheat[200];/* Alte Energie der einzelnen Objekte */
  23. char dx[200]; /* Richtung, in die die Objekte zeigen */
  24. char dy[200]; /* ebenfalls, hier: Y-Richtung -1,1 */
  25. char rx[200]; /* X-Richtung bei Rechtsdrehung */
  26. char ry[200]; /* Y-Richtung bei Rechtsdrehung */
  27. unsigned char nd;      /* =-1 fürs Neuzeichnen               */
  28. unsigned int zeit;     /* Zeit (in "Tics")                   */
  29. unsigned char wlk;     /* =-1, wenn wirklich ge"walkt" */
  30. unsigned char all[256];/* Gehen über dieses Pic erlaubt?   */
  31. unsigned char oll[200];/* Nummern der Objekte */
  32. long score=0L; /* Inzwischen: Credits (Geld) */
  33. char *snd1;
  34. char *snd2;
  35. struct IOAudio *ia;
  36. char *texts;
  37. #define TEXTBUF 20000L
  38. unsigned char ix[MTEXT];
  39. unsigned char iy[MTEXT];
  40. unsigned int it[MTEXT];
  41. char com[COMM][500];
  42. char coname[COMM][10];
  43. unsigned char con[COMM];
  44. char *coa[COMM];
  45. unsigned char cow[COMM];
  46. int coh[COMM];
  47. int coz[COMM];
  48. unsigned char ak_com;
  49. char com_attack[COMM][10];
  50. unsigned int mx_energy=100;
  51. unsigned char sst[200]; /* Shoot-Strength */
  52. unsigned char hst[200]; /* Hit-Strength */
  53. unsigned char ac[200];  /* Armor-Class  */
  54.  
  55. #define JUMP_COM while(*(++coa[fn])!='"')
  56.  
  57. struct Objekt
  58. {
  59. char *name;
  60. unsigned char interval;
  61. unsigned char oj;
  62. unsigned char oa;
  63. unsigned char ou;
  64. unsigned int heat;
  65. };
  66.  
  67. struct Objekt obb[]=
  68. {
  69. { "COBRA-MECH"    ,1,10,6,6,60000 },
  70. { "STANDARD-LASER",1,5 ,10,0,500 },
  71. { "GRANATE"       ,3,5 ,11,0,13  },
  72. { "FIGHTER"       ,13,10,18,18,9000 },
  73. { "DRONE"         ,15,10,23,0,5000 },
  74. { "EXPLOSION"     ,3,20,14,0,4 },
  75. { "BOMBE T1"      ,3,20,14,0,11 },
  76. { "DOOR"          ,1,105,67,0,2100 }
  77. };
  78.  
  79. struct Item
  80. {
  81. char name[18];
  82. char art;
  83. unsigned int prize;
  84. int level;
  85. };
  86.  
  87. struct Item item[IMAX];
  88. unsigned char itx[ITM];
  89. unsigned char ity[ITM];
  90. unsigned char itw[ITM];
  91. unsigned char itp[9];
  92. unsigned char itc[9];
  93. unsigned char srwp; /* short-range weapon */
  94. unsigned char lrwp; /* long-range weapon */
  95. unsigned char sh; /* Shield */
  96.  
  97. int insc=0;
  98.  
  99. char *
  100. com_arg(wohin,woher)
  101. char *wohin,*woher;
  102. {
  103. register char *p1,*p2;
  104.  
  105. p1=wohin; p2=woher+1;
  106. while((*(p1++)=*(p2++))!='"');
  107. *(p1-1)=0;
  108. return(p2-1);
  109. }
  110.  
  111. void
  112. show_items()
  113. {
  114. int tok;
  115. int itok;
  116. int itok4;
  117.  
  118. tok=-1;
  119. while(++tok<4)
  120. {
  121. itok=itp[tok]; itok4=itp[tok+4];
  122. sprintf(jj,"%1d %-12s %c#%02d %1d %-12s %c#%02d",
  123. tok+1,
  124. item[itok].name,
  125. item[itok].art,
  126. itc[tok],
  127. tok+5,
  128. item[itok4].name,
  129. item[itok4].art,
  130. itc[tok+4]);
  131. cprint(jj);
  132. }
  133. }
  134.  
  135. void
  136. get_item(nr)
  137. int nr;
  138. {
  139. int tok;
  140.  
  141. tok=0;
  142. while(itp[tok]!=0 && tok<8 && itp[tok]!=itw[nr]) tok++;
  143. if(tok>=8)
  144. {
  145.   cprint("Sorry, you are already carrying 8 items.");
  146.   return();
  147. }
  148. if(itp[tok]==itw[nr])
  149.   itc[tok]++;
  150. else
  151. {
  152.  itp[tok]=itw[nr];
  153.  itc[tok]=1;
  154. }
  155. itw[nr]=255;
  156. switch(item[itp[tok]].art)
  157. {
  158. case 'E':
  159. mx_energy+=item[itp[tok]].level;
  160. break;
  161. }
  162. cprint("OK.");
  163. }
  164.  
  165.  
  166. void
  167. take_item(xi,yi)
  168. int xi,yi;
  169. {
  170. register int tl;
  171. char tost;
  172. int anyth=0;
  173.  
  174. tost=0;
  175. tl=0;
  176. agaiggi:
  177. while((itw[tl]==255 || itx[tl]!=xi || ity[tl]!=yi) && tl<ITM) tl++;
  178. if(tl>=ITM)
  179. {
  180.   if(tost==0)
  181.     cprint("There is nothing.");
  182.   if(anyth==0 && oh[0]==54)
  183.     oh[0]=0;
  184.   return();
  185. }
  186. sprintf(jj,"You find: %s",item[itw[tl]].name);
  187. cprint(jj);
  188. cprint("Do you want to take it? (y/n)");
  189. kwait:
  190. while(((tost=*((char *)0xbfec01))&1)!=1);
  191. if(tost==-99 || tost==-43)
  192. {
  193.   get_item(tl);
  194.   tl++;
  195.   goto agaiggi;
  196. }
  197. if(tost==-109)
  198. {
  199.   tl++;
  200.   cprint("Not taken.");
  201.   anyth=1;
  202.   goto agaiggi;
  203. }
  204. goto kwait;
  205. }
  206.  
  207. char *
  208. find_label(fn,lbl)
  209. unsigned char fn;
  210. char *lbl;
  211. {
  212. register char *sok;
  213.  
  214. sok=com[fn]-1;
  215. weiter_suchen:
  216. while(*(++sok)!='_');
  217. sok=com_arg(jj,sok+1);
  218. if(strcmp(jj,lbl)!=0)
  219.   goto weiter_suchen;
  220. return(sok);
  221. }
  222.  
  223. void
  224. show_heat()
  225. {
  226. SetAPen(pm.dbr[dbz],2L);
  227. RectFill(pm.dbr[dbz],114L,(long)(43+(0xFFFF-heat[0])/1000),118L,108L);
  228. SetAPen(pm.dbr[1-dbz],2L);
  229. RectFill(pm.dbr[1-dbz],114L,(long)(43+(0xFFFF-heat[0])/1000),118L,108L);
  230. SetAPen(pm.dbr[dbz],0L);
  231. RectFill(pm.dbr[dbz],114L,43L,118L,(long)(43+(0xFFFF-heat[0])/1000));
  232. SetAPen(pm.dbr[1-dbz],0L);
  233. RectFill(pm.dbr[1-dbz],114L,43L,118L,(long)(43+(0xFFFF-heat[0])/1000));
  234. }
  235.  
  236. void
  237. Save_items(nmm)
  238. char *nmm;
  239. {
  240. int fc;
  241.  
  242. if((fc=open(nmm,O_WRONLY|O_CREAT))==-1)
  243.   return();
  244. write(fc,&item[0],(int)sizeof(struct Item)*IMAX);
  245. write(fc,&itx[0],(int)sizeof(unsigned char)*ITM);
  246. write(fc,&ity[0],(int)sizeof(unsigned char)*ITM);
  247. write(fc,&itw[0],(int)sizeof(unsigned char)*ITM);
  248. close(fc);
  249. }
  250.  
  251. void
  252. Load_items(nmm)
  253. char *nmm;
  254. {
  255. int fc;
  256.  
  257. if((fc=open(nmm,O_RDONLY))==-1)
  258.   return();
  259. read(fc,&item[0],(int)sizeof(struct Item)*IMAX);
  260. read(fc,&itx[0],(int)sizeof(unsigned char)*ITM);
  261. read(fc,&ity[0],(int)sizeof(unsigned char)*ITM);
  262. read(fc,&itw[0],(int)sizeof(unsigned char)*ITM);
  263. close(fc);
  264. }
  265.  
  266. void
  267. LadeText(name)
  268. char *name;
  269. {
  270. int fd;
  271. long lai;
  272.  
  273. if((fd=open(name,O_RDONLY))==-1)
  274. {
  275. sprintf(jj,"[Couldn't open %s]",name);
  276. cprint(jj);
  277. return();
  278. }
  279. lai=lseek(fd,0L,2);
  280. lseek(fd,0L,0);
  281. read(fd,texts,(int)lai);
  282. close(fd);
  283.  
  284. sprintf(jj,"%s.l",name);
  285. if((fd=open(jj,O_RDONLY))==-1)
  286. {
  287. sprintf(jj,"[Couldn't open %s.l]",name);
  288. cprint(jj);
  289. return();
  290. }
  291. read(fd,&ix[0],(int)(sizeof(unsigned char)*MTEXT));
  292. read(fd,&iy[0],(int)(sizeof(unsigned char)*MTEXT));
  293. read(fd,&it[0],(int)(sizeof(unsigned int)*MTEXT));
  294. close(fd);
  295. }
  296.  
  297. void
  298. Save_objs(nmm)
  299. char *nmm;
  300. {
  301. int fc;
  302.  
  303. if((fc=open(nmm,O_WRONLY|O_CREAT))==-1)
  304.   return();
  305.  
  306. write(fc,&ox[0],(int)sizeof(unsigned char)*200);
  307. write(fc,&oy[0],(int)sizeof(unsigned char)*200);
  308. write(fc,&oh[0],(int)sizeof(unsigned char)*200);
  309. write(fc,&oz[0],(int)sizeof(unsigned char)*200);
  310. write(fc,&oj[0],(int)sizeof(unsigned char)*200);
  311. write(fc,&oa[0],(int)sizeof(unsigned char)*200);
  312. write(fc,&ou[0],(int)sizeof(unsigned char)*200);
  313. write(fc,&heat[0],(int)sizeof(unsigned int)*200);
  314. write(fc,&aheat[0],(int)sizeof(unsigned int)*200);
  315. write(fc,&oll[0],(int)sizeof(unsigned char)*200);
  316. write(fc,&dx[0],(int)sizeof(char)*200);
  317. write(fc,&dy[0],(int)sizeof(char)*200);
  318. write(fc,&rx[0],(int)sizeof(char)*200);
  319. write(fc,&ry[0],(int)sizeof(char)*200);
  320. write(fc,&sst[0],(int)sizeof(unsigned char)*200);
  321. write(fc,&hst[0],(int)sizeof(unsigned char)*200);
  322. write(fc,&ac[0],(int)sizeof(unsigned char)*200);
  323.  
  324. close(fc);
  325. }
  326.  
  327. void
  328. Load_objs(nmm)
  329. char *nmm;
  330. {
  331. int fc;
  332.  
  333. if((fc=open(nmm,O_RDONLY))==-1)
  334.   return();
  335. read(fc,&ox[0],(int)sizeof(unsigned char)*200);
  336. read(fc,&oy[0],(int)sizeof(unsigned char)*200);
  337. read(fc,&oh[0],(int)sizeof(unsigned char)*200);
  338. read(fc,&oz[0],(int)sizeof(unsigned char)*200);
  339. read(fc,&oj[0],(int)sizeof(unsigned char)*200);
  340. read(fc,&oa[0],(int)sizeof(unsigned char)*200);
  341. read(fc,&ou[0],(int)sizeof(unsigned char)*200);
  342. read(fc,&heat[0],(int)sizeof(unsigned int)*200);
  343. read(fc,&aheat[0],(int)sizeof(unsigned int)*200);
  344. read(fc,&oll[0],(int)sizeof(unsigned char)*200);
  345. read(fc,&dx[0],(int)sizeof(char)*200);
  346. read(fc,&dy[0],(int)sizeof(char)*200);
  347. read(fc,&rx[0],(int)sizeof(char)*200);
  348. read(fc,&ry[0],(int)sizeof(char)*200);
  349. read(fc,&sst[0],(int)sizeof(unsigned char)*200);
  350. read(fc,&hst[0],(int)sizeof(unsigned char)*200);
  351. read(fc,&ac[0],(int)sizeof(unsigned char)*200);
  352.  
  353. close(fc);
  354. }
  355.  
  356. void
  357. LadeAlles(nmm)
  358. char *nmm;
  359. {
  360. char kkl[30];
  361. sprintf(kkl,"%s.pm",nmm);
  362. LoadPlay(kkl);
  363. sprintf(kkl,"%s.it",nmm);
  364. Load_items(kkl);
  365. sprintf(kkl,"%s.texts",nmm);
  366. LadeText(kkl);
  367. sprintf(kkl,"%s.objs",nmm);
  368. Load_objs(kkl);
  369. }
  370.  
  371. void
  372. addscore(addy)
  373. int addy;
  374. {
  375. score+=(long)addy;
  376. sprintf(jj,"%06ld",score);
  377. SetAPen(pm.dbr[dbz],2L);
  378. SetBPen(pm.dbr[dbz],0L);
  379. SetAPen(pm.dbr[1-dbz],2L);
  380. SetBPen(pm.dbr[1-dbz],0L);
  381. Move(pm.dbr[dbz],47L,62L);
  382. Text(pm.dbr[dbz],jj,(long)strlen(jj));
  383. Move(pm.dbr[1-dbz],47L,62L);
  384. Text(pm.dbr[1-dbz],jj,(long)strlen(jj));
  385. }
  386.  
  387. void
  388. death()
  389. {
  390. cprint("You are really lucky - As this is only version 0.5 of MF, you can't die... Normally, your mech would have been blown to pieces just now.");
  391. heat[0]=60000L; show_heat();
  392. }
  393.  
  394. void
  395. explosion(nr)
  396. register unsigned char nr;
  397. {
  398. pic(ox[nr],oy[nr],(unsigned char)14);
  399. oa[nr]=14;
  400. oll[nr]=5;
  401. heat[nr]=obb[5].heat;
  402. oz[nr]=obb[5].interval;
  403. StopSound(ia);
  404. ia=StartSound(snd2,64,15000,1);
  405. }
  406.  
  407.  
  408.  
  409. unsigned char
  410. walk(nx,ny,nr)
  411. register unsigned char nx,ny;
  412. register unsigned char nr;
  413. {
  414. register unsigned char haha;
  415.  
  416. wlk=0;
  417. haha=(*(pm.playbeg+ny*pm.b+nx))&127;
  418. if(all[haha]>oj[nr])
  419.   return(haha);
  420. pic(ox[nr],oy[nr],oh[nr]);
  421. if(ou[nr]!=0)
  422. {
  423. switch((int)(nx-ox[nr]))
  424. {
  425.   case 1:
  426.   oa[nr]=ou[nr]; dx[nr]=1; dy[nr]=0; break;
  427.   case -1:
  428.   oa[nr]=ou[nr]+2; dx[nr]=-1; dy[nr]=0; break;
  429.   case 0:
  430.   oa[nr]= (ny<oy[nr]) ? ou[nr]+1:ou[nr]+3;
  431.   dx[nr]=0;
  432.   dy[nr]= (ny<oy[nr]) ? -1:1;
  433. }
  434. rx[nr]=(dx[nr]*dx[nr]-1)*dy[nr];
  435. ry[nr]=-(dy[nr]*dy[nr]-1)*dx[nr];
  436. }
  437. oh[nr]=haha; ox[nr]=nx; oy[nr]=ny;
  438. pic(nx,ny,oa[nr]);
  439. nd=-1;
  440. wlk=-1;
  441. return(haha);
  442. }
  443.  
  444. void
  445. add(ax,ay,nx,ny,nr)
  446. unsigned char ax,ay,nx,ny,nr;
  447. {
  448. register int ser;
  449.  
  450. ser=-1;
  451. while(++ser<200 && oa[ser]!=0);
  452. ox[ser]=ax; oy[ser]=ay; oh[ser]=(*(pm.playbeg+ay*pm.b+ax))&127;
  453. oz[ser]=obb[nr].interval; 
  454. oj[ser]=obb[nr].oj; oa[ser]=obb[nr].oa; ou[ser]=obb[nr].ou;
  455. heat[ser]=obb[nr].heat; aheat[ser]=heat[ser]; oll[ser]=nr;
  456. if(nx!=ax)
  457.   dx[ser]= (nx<ax) ? -1:1;
  458. else
  459.   dx[ser]=0;
  460. if(ny!=ay)
  461.   dy[ser]= (ny<ay) ? -1:1;
  462. else
  463.   dy[ser]=0;
  464.  
  465. walk(nx,ny,ser);
  466. if(wlk==0)
  467. { oa[ser]=0; return(); }
  468. }
  469.  
  470. void
  471. message(ms)
  472. char *ms;
  473. {
  474. char *anf;
  475. register char *pos;
  476. int answer=0;
  477.  
  478. pos=ms-1;
  479. anf=ms;
  480.  
  481. msloop:
  482. while(*(++pos)!='&' && *pos!=0);
  483. if(*pos==0)
  484. {
  485.   if(pos>anf)
  486.     cprint(anf);
  487.   return();
  488. }
  489. if(pos>anf)
  490. {
  491.   *pos=0;
  492.   cprint(anf);
  493. }
  494. *(pos++)='&';
  495. anf=pos+1;
  496. switch(*pos)
  497. {
  498. case 'T': /* Teleport: "&T23/45&dnjcndv&Pgold.iff&You see...&W&&p& */
  499. {
  500. int tx,ty;
  501.  
  502. while(*(++pos)!='/');
  503. *pos=0;
  504. tx=atoi(anf);
  505. *pos='/';
  506. anf=pos+1;
  507. while(*(++pos)!='&');
  508. *pos=0;
  509. ty=atoi(anf);
  510. *pos='&';
  511. walk(tx,ty,0);
  512. nd=-1;
  513. }
  514. break;
  515. case 'P':
  516. {
  517. struct BitMap bbit;
  518.  
  519. while(*(++pos)!='&');
  520. *pos=0;
  521. strcpy(jj,anf);
  522. *pos='&';
  523. openbit(&bbit,96,90,5);
  524. read_iff(jj,&bbit,0L,0L);
  525. SetAPen(pm.dbr[1-dbz],0L);
  526. RectFill(pm.dbr[1-dbz],131L,18L,233L,109L);
  527. BltBitMap(&bbit,0L,0L,pm.sb[1-dbz],134L,18L,96L,90L,0xC0L,0xFFL,0L);
  528. WaitBlit();
  529. closebit(&bbit);
  530. }
  531. break;
  532. case 'p':
  533. pos++;
  534. SetAPen(pm.dbr[1-dbz],0L);
  535. RectFill(pm.dbr[1-dbz],131L,18L,233L,109L);
  536. gn=1;
  537. ShowPlay(ox[0]-5,oy[0]-4);
  538. turn();
  539. break;
  540. case 'W':
  541. pos++;
  542. while(!LMB_DRUCK);
  543. break;
  544. case 'Q': 
  545. /* Question: "&Qbanana&Yes, that was the password.&E&&q&That was wrong!" */
  546. {
  547. char inni[50];
  548.  
  549. while(*(++pos)!='&');
  550. *pos=0;
  551. strcpy(jj,anf);
  552. *pos='&';
  553. Inline(inni);
  554. if(strcmp(jj,inni)!=0)
  555. {
  556.   pos++;
  557.   while(*pos!='&' || *(pos+1)!='q') pos++;
  558.   pos=pos+2;
  559. }
  560. }
  561. break;
  562. case 'E':
  563.   return();
  564. break;
  565. case 'D':
  566. {
  567. int del;
  568.  
  569. while(*(++pos)!='&');
  570. *pos=0;
  571. del=atoi(anf);
  572. *pos='&';
  573. Delay((long)del);
  574. }
  575. break;
  576. case 'S': /* Set "&S23/77=109&" */
  577. {
  578. unsigned char wx,wy,wd;
  579.  
  580. while(*(++pos)!='/');
  581. *pos=0;
  582. wx=(unsigned char)atoi(anf);
  583. *pos='/';
  584. anf=pos+1;
  585. while(*(++pos)!='=');
  586. *pos=0;
  587. wy=(unsigned char)atoi(anf);
  588. *pos='=';
  589. anf=pos+1;
  590. while(*(++pos)!='&');
  591. *pos=0;
  592. wd=(unsigned char)atoi(anf);
  593. *pos='&';
  594. pic(wx,wy,wd);
  595. }
  596. break;
  597. default:
  598. while(*(++pos)!='&');
  599. }
  600. anf=pos+1;
  601. goto msloop;
  602. }
  603.  
  604. unsigned int hvorher;
  605.  
  606. int
  607. sub(x,y,wieviel)
  608. register unsigned char x,y;
  609. unsigned int wieviel;
  610. {
  611. register unsigned char simoka,nm;
  612.  
  613. if((*(pm.playbeg+y*pm.b+x))&127==0)
  614.   return(-1);
  615. simoka=0;
  616. while(simoka<200 && (oa[simoka]==0 || ox[simoka]!=x || oy[simoka]!=y)) simoka++;
  617. if(simoka>=200)
  618. {
  619.   if((*(pm.playbeg+y*pm.b+x)&127)==27)
  620.   {
  621.     *(pm.playbeg+y*pm.b+x)&=128;
  622.     add(x,y,x,y,6);
  623.     StopSound(ia);
  624.     ia=StartSound(snd2,50,17000,1);
  625.   }
  626.   return(-1);
  627. }
  628. nm=oll[simoka];
  629. if(nm==1 || nm==2 || (nm>=5 && nm<=7))
  630.   return(-1);
  631. wieviel=((rand()/1000)*wieviel*ac[simoka])/3500;
  632. hvorher=heat[simoka];
  633. heat[simoka]-=wieviel;
  634. if(nm==0)
  635. {
  636.   sprintf(jj,"You have been hit for %d damage points.",wieviel);
  637.   cprint(jj);
  638.   show_heat();
  639. }
  640. if(heat[simoka]>hvorher)
  641. {
  642.   oa[simoka]=0;
  643.   /* ______EXPLOSION !!!!!!!! */
  644.   switch(nm)
  645.   {
  646.   case 0:
  647.     death(); break;
  648.   case 3:
  649.     addscore(100); explosion(simoka);
  650.     nm=-1; while(con[++nm]!=simoka);
  651.     coa[nm]=0L;
  652.     cprint("Hostile FIGHTER exploded."); break;
  653.   case 4:
  654.     addscore(50); explosion(simoka); cprint("Hostile DRONE exploded."); break;
  655.   case 8:
  656.     addscore(150); explosion(simoka); cprint("Hostile fighter exploded."); break;
  657.   }
  658.   return(-2);
  659. }
  660. return(wieviel);
  661. }
  662.  
  663. void
  664. lade_com(xc,yc)
  665. unsigned char xc,yc;
  666. {
  667. char com_name[50];
  668. int fc;
  669. long lai;
  670.  
  671. sprintf(com_name,"%d-%d.com",(int)xc,(int)yc);
  672. if((fc=open(com_name,O_RDONLY))==-1)
  673.   return();
  674. lai=lseek(fc,0L,2);
  675. lseek(fc,0L,0);
  676. read(fc,com[ak_com],(int)lai);
  677. close(fc);
  678.  
  679. fc=0;
  680. while(ox[fc]!=xc || oy[fc]!=yc)
  681.   fc++;
  682. con[ak_com]=fc;
  683. coa[ak_com]=com[ak_com];
  684. cow[ak_com]=0;
  685. ak_com++;
  686. /* Nummer des entsprechenden Fighters suchen und eintragen */
  687. }
  688.  
  689. void
  690. Game()
  691. {
  692. register int si;
  693. register unsigned char xx,yy;
  694. register unsigned char zz;
  695. unsigned char weapon=1;
  696. int tafel=0;
  697. int fnumber=0;
  698. char *mesg=0L;
  699.  
  700. ak_com=0;
  701. cw.rp=pm.dbr[1-dbz];
  702. cprint("This program was created with the PlayMap-Routines by Florian Marquardt.");
  703.  
  704. hst[0]=10; ac[0]=200; sst[0]=10; srwp=8; lrwp=8; sh=8;
  705. si=-1; while(++si<256) all[si]=100;
  706. si=-1; while(++si<9)   itp[si]=0;
  707. /* ___Jetzt muß alles, worüber man gehen kann auf <10 gesetzt werden. */
  708. all[0]=1; all[4]=2; all[12]=3; all[13]=4; all[24]=1; all[26]=6;
  709. all[32]=1; all[33]=1; all[34]=1; all[35]=1; all[48]=1;
  710. all[49]=1; all[50]=1; all[51]=1; all[100]=1; all[54]=1; all[55]=1; all[56]=7;
  711. all[44]=1; all[45]=1; all[46]=1; all[47]=1;
  712. /* ___Bewegliche Objekte aufsuchen */
  713. xx=0;
  714. oa[0]=2;
  715. while(++xx<200)
  716. {
  717.   yy=0;
  718.   while(++yy<100)
  719.   {
  720.     switch((*(pm.playbeg+yy*pm.b+xx))&127)
  721.     {
  722.       case 6:
  723.       printf("MECH-COBRA bei %d,%d!\n",xx,yy);
  724.       (*(pm.playbeg+yy*pm.b+xx))&=128; oa[0]=0;
  725.       add(xx-1,yy,xx,yy,0); break;
  726.     }
  727.   }
  728. }
  729. nd=-1;
  730.  
  731. #asm
  732.   move.b #0,$bfea01
  733.   move.b #0,$bfe901
  734.   move.b #0,$bfe801
  735. #endasm
  736.  
  737. blopp:
  738. #asm
  739.   move.l d0,-(a7)
  740. _nochnicht:
  741.   clr.l d0
  742.   move.b $bfea01,d0
  743.   lsl.l #8,d0
  744.   lsl.l #8,d0
  745.   move.b $bfe901,d0
  746.   lsl.l #8,d0
  747.   move.b $bfe801,d0
  748.   cmp.w  #3,d0
  749.   bls _nochnicht
  750.   move.b #0,$bfea01
  751.   move.b #0,$bfe901
  752.   move.b #0,$bfe801
  753.   move.l (a7)+,d0
  754. #endasm
  755. if(nd)
  756. {
  757.   ShowPlay(ox[0]-5,oy[0]-4);
  758.   turn();
  759.   nd=0;
  760. }
  761. zeit++;
  762. if(zeit%1000==0 && heat[0]<65000)
  763. {
  764.   heat[0]++;
  765.   show_heat();
  766. }
  767. if(mesg!=0L)
  768. {  message(mesg); mesg=0L; }
  769. si=-1;
  770. while(++si<200)
  771. {
  772.   if(oa[si]!=0 && zeit%oz[si]==0)
  773.   {
  774.     switch(oll[si])
  775.     {
  776.       case 0: break;
  777.       case 1: 
  778.       zz=walk(ox[si]+dx[si],oy[si]+dy[si],si); 
  779.       if(wlk==0) 
  780.       {
  781.         oa[si]=0;
  782.         pic(ox[si],oy[si],oh[si]);
  783.         if(zz>=6 && zz<=9)
  784.           sub(ox[si]+dx[si],oy[si]+dy[si],heat[si]);
  785.         if(zz==23)
  786.           sub(ox[si]+dx[si],oy[si]+dy[si],heat[si]);
  787.         if(zz>=18 && zz<=21)
  788.           sub(ox[si]+dx[si],oy[si]+dy[si],heat[si]);
  789.         if(zz==27)
  790.           sub(ox[si]+dx[si],oy[si]+dy[si],heat[si]);
  791.         nd=-1;
  792.       }
  793.       break;
  794.       case 2:
  795.       heat[si]--;
  796.       nd=-1;
  797.       if(heat[si]>=10)
  798.       {
  799.         zz=walk(ox[si]+dx[si],oy[si]+dy[si],si);      
  800.         break;
  801.       }
  802.       if(heat[si]==0)
  803.       {
  804.         pic(ox[si],oy[si],13);
  805.         oa[si]=0;
  806.         break;
  807.       }
  808.       xx=(unsigned char)(ox[si]-rand()%5+2);
  809.       yy=(unsigned char)(oy[si]-rand()%5+2);
  810.       sub(xx,yy,3000);
  811.       if((*(pm.playbeg+yy*pm.b+xx))&127==0)
  812.         pic(xx,yy,12);
  813.       pic(ox[si],oy[si],(unsigned char)(zeit%2+14));
  814.       break;
  815.       case 4:
  816.       dx[si]=((unsigned char)rand()%3)-1;
  817.       dy[si]=((unsigned char)rand()%3)-1;
  818.       zz=walk(ox[si]+dx[si],
  819.       oy[si]+dy[si],si);
  820.       if(wlk==0) 
  821.         if(dx[si]!=0 || dy[si]!=0)
  822.           sub(ox[si]+dx[si],oy[si]+dy[si],10000);
  823.       break;
  824.       case 5:
  825.       heat[si]--;
  826.       nd=-1;
  827.       if(heat[si]>0)
  828.         pic(ox[si],oy[si],(unsigned char)(zeit%2+14));
  829.       else
  830.       {
  831.         pic(ox[si],oy[si],(unsigned char)13);
  832.         oa[si]=0;
  833.       }
  834.       break;
  835.       case 6:
  836.       heat[si]--;
  837.       nd=-1;
  838.       if(heat[si]==9)
  839.       {
  840.         sub(ox[si]-1,oy[si],10000); pic(ox[si]-1,oy[si],14);
  841.         sub(ox[si]+1,oy[si],10000); pic(ox[si]+1,oy[si],14);   
  842.         sub(ox[si],oy[si]+1,10000); pic(ox[si],oy[si]+1,14);
  843.         sub(ox[si],oy[si]-1,10000); pic(ox[si],oy[si]-1,14);
  844.         break;
  845.       }
  846.       if(heat[si]<=7)
  847.       {
  848.   pic(ox[si]-1,oy[si],0);
  849.   pic(ox[si]+1,oy[si],0);
  850.   pic(ox[si],oy[si]+1,0); 
  851.   pic(ox[si],oy[si]-1,0);
  852.   pic(ox[si],oy[si],0);
  853.   oa[si]=0;
  854.       break;
  855.       }
  856.       break;
  857.       case 7:
  858.       heat[si]--;
  859.       if(heat[si]>2049 && heat[si]<2089)
  860.         break;
  861.       if(heat[si]>=2090)
  862.       { nd=-1; pic(ox[si],oy[si],(unsigned char)(heat[si]-2033)); break; }
  863.       if(heat[si]==2089)
  864.       { nd=-1; pic(ox[si],oy[si],0); break; }
  865.       if(heat[si]==2049)
  866.         if((*(pm.playbeg+ox[si]+oy[si]*pm.b))&127!=0)
  867.         { heat[si]++; break; }
  868.         else
  869.         { StopSound(ia); ia=StartSound(snd2,15,20000,1); }
  870.       if(heat[si]>=2039)
  871.       { nd=-1; pic(ox[si],oy[si],(unsigned char)(2106-heat[si])); break; }
  872.       oa[si]=0;
  873.       break;
  874.     case 8:
  875.     if((ox[0]==ox[si] || oy[0]==oy[si]) && zeit%5==0)
  876.     {
  877.     if(ox[si]==ox[0])
  878.     {
  879.     if(oy[si]>oy[0] && oy[si]-oy[0]<5)
  880.     {
  881.     obb[1].heat=(unsigned int)sst[si]*5;
  882.     add(ox[si],oy[si],ox[si],oy[si]-1,(unsigned char)1);
  883.     if(wlk==0)
  884.       sub(ox[si],oy[si]-1,(unsigned int)hst[si]*5);
  885.     break;
  886.     }
  887.     if(oy[si]<oy[0] && oy[0]-oy[si]<5)
  888.     {
  889.     obb[1].heat=(unsigned int)sst[si]*5;
  890.     add(ox[si],oy[si],ox[si],oy[si]+1,(unsigned char)1);
  891.     if(wlk==0)
  892.       sub(ox[si],oy[si]+1,(unsigned int)hst[si]*5);
  893.     break;
  894.     }
  895.     }
  896.     if(oy[si]==oy[0])
  897.     {
  898.     if(ox[si]>ox[0] && ox[si]-ox[0]<5)
  899.     {
  900.     obb[1].heat=(unsigned int)sst[si]*5;
  901.     add(ox[si],oy[si],ox[si]-1,oy[si],(unsigned char)1);
  902.     if(wlk==0)
  903.       sub(ox[si]-1,oy[si],(unsigned int)hst[si]*5);
  904.     break;
  905.     }
  906.     if(ox[si]<ox[0] && ox[0]-ox[si]<5)
  907.     {
  908.     obb[1].heat=(unsigned int)sst[si]*5;
  909.     add(ox[si],oy[si],ox[si]+1,oy[si],(unsigned char)1);
  910.     if(wlk==0)
  911.       sub(ox[si]+1,oy[si],(unsigned int)hst[si]*5);
  912.     break;
  913.     }
  914.     }
  915.     }
  916.     if(ox[0]<ox[si])
  917.     {
  918.       walk(ox[si]-1,oy[si],si);
  919.       if(wlk!=0)
  920.         break;
  921.     }
  922.     if(ox[0]>ox[si])
  923.     {
  924.       walk(ox[si]+1,oy[si],si);
  925.       if(wlk!=0)
  926.         break;
  927.     }
  928.     if(oy[0]<oy[si])
  929.       walk(ox[si],oy[si]-1,si);
  930.     else
  931.       if(oy[0]>oy[si])
  932.         walk(ox[si],oy[si]+1,si);
  933.     break;
  934.     }
  935.   }
  936. }
  937.  
  938. /* Steuerung der "Fighter": */
  939. /*
  940.  
  941. fnumber++;
  942. if(fnumber>=ak_com) fnumber=0;
  943. if(coa[fnumber]!=0L)
  944. {
  945. register unsigned char fn;
  946. register unsigned char conni;
  947.  
  948. fn=(unsigned char)fnumber;
  949. conni=con[fn];
  950. nochmal_com:
  951. if(heat[conni]<aheat[conni])
  952. { coa[fn]=find_label(fn,com_attack); aheat[conni]=heat[conni]; }
  953. switch(*coa[fn])
  954. {
  955.   case 'N':
  956.     coa[fn]=com_arg(coname[fn],coa[fn]+1);
  957.     break;
  958.   case 'S':
  959.     coa[fn]=com_arg(jj,coa[fn]+1);
  960.     if(ox[0]==ox[conni]+dx[conni] && oy[0]==oy[conni]+dy[conni])
  961.       cprint(jj);
  962.     break;
  963.   case 'n':
  964.     walk(ox[conni],oy[conni]-1,conni);
  965.     if(wlk==0) cow[fn]&=4; else BITCLEAR(cow[fn],4);
  966.     break;
  967.   case 'w':
  968.     walk(ox[conni]+1,oy[conni],conni);
  969.     if(wlk==0) cow[fn]&=4; else BITCLEAR(cow[fn],4);
  970.     break;
  971.   case 'e':
  972.     walk(ox[conni]-1,oy[conni],conni);
  973.     if(wlk==0) cow[fn]&=4; else BITCLEAR(cow[fn],4);
  974.     break;
  975.   case 's':
  976.     walk(ox[conni],oy[conni]-1,conni);
  977.     if(wlk==0) cow[fn]&=4; else BITCLEAR(cow[fn],4);
  978.     break;
  979.   case 'f':
  980.     wlk=0;
  981.     if((*(pm.playbeg+ox[conni]+dx[conni]+(oy[conni]+dy[conni])*pm.b))&127==100)
  982.     {
  983.       walk(ox[conni]+dx[conni],oy[conni]+dy[conni],conni);
  984.       BITCLEAR(cow[fn],4);
  985.       break;
  986.     }
  987.     if((*(pm.playbeg+ox[conni]+rx[conni]+(oy[conni]+ry[conni])*pm.b))&127==100)
  988.     {
  989.       walk(ox[conni]+rx[conni],oy[conni]+ry[conni],conni);
  990.       BITCLEAR(cow[fn],4);
  991.       break;
  992.     }
  993.     if((*(pm.playbeg+ox[conni]-rx[conni]+(oy[conni]-ry[conni])*pm.b))&127==100)
  994.     {
  995.       walk(ox[conni]-rx[conni],oy[conni]-ry[conni],conni);
  996.       BITCLEAR(cow[fn],4);
  997.       break;
  998.     }
  999.     if((*(pm.playbeg+ox[conni]-dx[conni]+(oy[conni]-dy[conni])*pm.b))&127==100)
  1000.     {
  1001.       walk(ox[conni]-dx[conni],oy[conni]-dy[conni],conni);
  1002.       BITCLEAR(cow[fn],4);
  1003.       break;
  1004.     }
  1005.     BITSET(cow[fn],4);
  1006.     break;
  1007.   case 'd':
  1008.     coa[fn]=com_arg(jj,coa[fn]+1);
  1009.     si=(unsigned char)atoi(jj);
  1010.     coa[fn]=com_arg(jj,coa[fn]+1);
  1011.     if((*(pm.playbeg+ox[conni]+dx[conni]+(oy[conni]+dy[conni])*pm.b))&127==si)
  1012.       coa[fn]=find_label(fn,jj);
  1013.     break;
  1014.   case 'g':
  1015.     coa[fn]=find_label(fn,jj);
  1016.     break;
  1017.   case '_':
  1018.     coa[fn]=com_arg(jj,coa[fn]+1);
  1019.     break;
  1020.   case 'b':
  1021.     if(BITNTEST(cow[fn],4) && BITNTEST(cow[fn],1) && ++coz[fn]<coh[fn])
  1022.     {
  1023.       coa[fn]--;
  1024.       goto nochmal_com;
  1025.     }
  1026.     else
  1027.       coz[fn]=0;
  1028.     break;
  1029.   case 'A':
  1030.     coa[fn]=com_arg(com_attack[fn],coa[fn]+1);
  1031.     break;
  1032.   case 'i':
  1033.     coa[fn]=com_arg(jj,coa[fn]+1);
  1034.     if(heat[conni]<atoi(jj))
  1035.     {
  1036.       com_arg(jj,coa[fn]+1);
  1037.       coa[fn]=find_label(fn,jj);
  1038.     }
  1039.     else
  1040.       coa[fn]=com_arg(jj,coa[fn]+1);
  1041.     break;
  1042.   case '!':
  1043.     dx[conni]=-dx[conni]; dy[conni]=-dy[conni];
  1044.     rx[conni]=-rx[conni]; ry[conni]=-ry[conni];
  1045.     oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
  1046.     pic(ox[conni],oy[conni],oa[conni]);
  1047.     nd=-1;
  1048.     break;
  1049.   case '<':
  1050.     dx[conni]=-rx[conni]; 
  1051.     dy[conni]=-ry[conni];
  1052.     rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
  1053.     ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];    
  1054.     oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
  1055.     pic(ox[conni],oy[conni],oa[conni]);
  1056.     nd=-1;
  1057.     break;
  1058.   case '>':
  1059.     dx[conni]=rx[conni]; 
  1060.     dy[conni]=ry[conni];
  1061.     rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
  1062.     ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];    
  1063.     oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
  1064.     pic(ox[conni],oy[conni],oa[conni]);
  1065.     nd=-1;
  1066.     break;
  1067.   case '-':
  1068.     walk(ox[conni]+dx[conni],oy[conni]+dy[conni],conni);
  1069.     if(wlk==0) cow[fn]|=4; else BITCLEAR(cow[fn],4);
  1070.     break;
  1071.   case 'y':
  1072.     si=0;
  1073.     coa[fn]=com_arg(jj,coa[fn]+1);
  1074.     while(++si<=20 && all[(*(pm.playbeg+ox[conni]+dx[conni]*si+(oy[conni]+dy[conni]*si)*pm.b))&127]<=10);
  1075.     if(ox[0]==ox[conni]+dx[conni]*si && oy[0]==oy[conni]+dy[conni]+si)
  1076.       coa[fn]=find_label(fn,jj);
  1077.     break;
  1078.   case 'l':
  1079.     add(
  1080. ox[conni],
  1081. oy[conni],
  1082. ox[conni]+dx[conni],
  1083. oy[conni]+dy[conni],
  1084. (unsigned char)1);
  1085.     break;
  1086.   case 'a':
  1087.     add(
  1088. ox[conni],
  1089. oy[conni],
  1090. ox[conni]+dx[conni],
  1091. oy[conni]+dy[conni],
  1092. (unsigned char)6);
  1093.     break;
  1094.   case 'C':
  1095.     coa[fn]=com_arg(jj,coa[fn]+1);
  1096.     coh[fn]=atoi(jj);
  1097.     coz[fn]=0;
  1098.     break;
  1099.   case 'R':
  1100.     if((cow[fn]&8)!=8 && all[(*(pm.playbeg+ox[conni]+rx[conni]+(oy[conni]+ry[conni])*pm.b))&127]<=10)
  1101.     {
  1102.      dx[conni]=rx[conni];
  1103.      dy[conni]=ry[conni];
  1104.      rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
  1105.      ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];
  1106.      oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
  1107.      pic(ox[conni],oy[conni],oa[conni]);
  1108.      nd=-1;
  1109.      BITSET(cow[fn],8);
  1110.     }
  1111.     else
  1112.     {
  1113.      BITCLEAR(cow[fn],8);
  1114.      walk(ox[conni]+dx[conni],oy[conni]+dy[conni],conni);
  1115.      if(wlk==0) 
  1116.     {
  1117.      dx[conni]=-rx[conni];
  1118.      dy[conni]=-ry[conni];
  1119.      rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
  1120.      ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];    
  1121.      oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
  1122.      pic(ox[conni],oy[conni],oa[conni]);
  1123.      nd=-1;
  1124.      BITSET(cow[fn],8);
  1125.     }
  1126.     else BITCLEAR(cow[fn],4);
  1127.     }
  1128.     break;
  1129.   case 'L':
  1130.     if((cow[fn]&8)!=8 && all[(*(pm.playbeg+ox[conni]-rx[conni]+(oy[conni]-ry[conni])*pm.b))&127]<=10)
  1131.     {
  1132.      dx[conni]=-rx[conni];
  1133.      dy[conni]=-ry[conni];
  1134.      rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
  1135.      ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];    
  1136.      oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
  1137.      pic(ox[conni],oy[conni],oa[conni]);
  1138.      nd=-1;
  1139.      BITSET(cow[fn],8);
  1140.     }
  1141.     else
  1142.     {
  1143.      BITCLEAR(cow[fn],8);
  1144.      walk(ox[conni]+dx[conni],oy[conni]+dy[conni],conni);
  1145.      if(wlk==0)
  1146.     {
  1147.      dx[conni]=rx[conni];
  1148.      dy[conni]=ry[conni];
  1149.      rx[conni]=(dx[conni]*dx[conni]-1)*dy[conni];
  1150.      ry[conni]=-(dy[conni]*dy[conni]-1)*dx[conni];
  1151.      oa[conni]=ou[conni]-dx[conni]+1+(dy[conni]+1)*dy[conni];
  1152.      pic(ox[conni],oy[conni],oa[conni]);
  1153.      nd=-1;
  1154.      BITSET(cow[fn],8);
  1155.     }
  1156.     else BITCLEAR(cow[fn],4);
  1157.     }
  1158.     break;
  1159.  
  1160.   
  1161.   coa[fn]++;
  1162. }
  1163. */
  1164. /* Ende der Steuerung der "Fighter" */
  1165.  
  1166. if(RMB_DRUCK)
  1167. {
  1168. int choice;
  1169.  
  1170. choice=menu(pm.dbs[1-dbz],pm.dbr[1-dbz],(int)pm.dbs[1-dbz]->MouseX,
  1171. (int)pm.dbs[1-dbz]->MouseY,10,4,"Menu:|Actions|Game|Cancel||");
  1172. switch(choice)
  1173. {
  1174. case 2:
  1175. choice=menu(pm.dbs[1-dbz],pm.dbr[1-dbz],(int)pm.dbs[1-dbz]->MouseX,
  1176. (int)pm.dbs[1-dbz]->MouseY,10,5,"Game:|Quit|Debug|Coords|Cancel||");
  1177. switch(choice)
  1178. {
  1179. case 1:
  1180.   return();
  1181. case 2:
  1182. {
  1183. cprint("Nr. of object to debug ?");
  1184. Inline(jj);
  1185. choice=atoi(jj);
  1186. sprintf(jj,"%d: ID:%d x:%d y:%d h:%d dx:%d dy:%d oa:%d ou:%d sst:%d hst:%d ac:%d",
  1187. choice,(int)oll[choice],(int)ox[choice],(int)oy[choice],(int)heat[choice],(int)dx[choice],(int)dy[choice],
  1188. (int)oa[choice],(int)ou[choice],(int)sst[choice],(int)hst[choice],(int)ac[choice]);
  1189. cprint(jj);
  1190. }
  1191. break;
  1192. case 3:
  1193. sprintf(jj,"Current location: X:%d Y:%d",ox[0],oy[0]);
  1194. cprint(jj);
  1195. break;
  1196. }
  1197. break;
  1198. case 1:
  1199. choice=menu(pm.dbs[1-dbz],pm.dbr[1-dbz],(int)pm.dbs[1-dbz]->MouseX,
  1200. (int)pm.dbs[1-dbz]->MouseY,10,8,"Actions:|Inventory|Take|Drop|SRWeapon|LRWeapon|Shield|Cancel||");
  1201. switch(choice)
  1202. {
  1203. case 1:
  1204. show_items();
  1205. break;
  1206. case 2:
  1207. take_item(ox[0],oy[0]);
  1208. break;
  1209. case 3:
  1210. show_items();
  1211. cprint("Which item do you want to drop?");
  1212. while(!LMB_DRUCK);
  1213. choice=(pm.dbs[1-dbz]->MouseX/160)*4+
  1214. (pm.dbs[1-dbz]->MouseY-cw.yo)/cw.rp->TxHeight-cw.zh+5;
  1215. if(choice<0 || choice>7 || itp[choice]=='.')
  1216.   cprint("Nothing dropped.");
  1217. else
  1218. {
  1219. register int such;
  1220.  
  1221. if(srwp==choice)
  1222.   hst[0]-=item[itp[choice]].level;
  1223. if(lrwp==choice)
  1224.   sst[0]-=item[itp[choice]].level;
  1225. if(sh==choice)
  1226.   ac[0]+=item[itp[choice]].level;
  1227. such=-1;
  1228. while(itw[++such]!=255);
  1229. itw[such]=itp[choice];
  1230. itx[such]=ox[0];
  1231. ity[such]=oy[0];
  1232. sprintf(jj,"%s dropped.",item[itp[choice]].name);
  1233. cprint(jj);
  1234. if((--itc[choice])<=0)
  1235.   itp[choice]=0;
  1236. if(oh[0]==0)
  1237.   oh[0]=54;
  1238. }
  1239. break;
  1240. case 4:
  1241. show_items();
  1242. cprint("Select short-range weapon.");
  1243. while(!LMB_DRUCK);
  1244. choice=(pm.dbs[1-dbz]->MouseX/160)*4+
  1245. (pm.dbs[1-dbz]->MouseY-cw.yo)/cw.rp->TxHeight-cw.zh+6;
  1246. if(choice<1 || choice>8 || item[itp[choice-1]].art!='R')
  1247.   cprint("Nothing selected.");
  1248. else
  1249. {
  1250. choice--;
  1251. if(srwp!=8)
  1252.   hst[0]=hst[0]-item[itp[srwp]].level+item[itp[choice]].level;
  1253. else
  1254.   hst[0]+=item[itp[choice]].level;
  1255. srwp=(unsigned char)choice;
  1256. sprintf(jj,"OK. '%s' selected as short-range weapon.",item[itp[srwp]].name);
  1257. cprint(jj);
  1258. }
  1259. break;
  1260. case 5:
  1261. show_items();
  1262. cprint("Select long-range weapon.");
  1263. while(!LMB_DRUCK);
  1264. choice=(pm.dbs[1-dbz]->MouseX/160)*4+
  1265. (pm.dbs[1-dbz]->MouseY-cw.yo)/cw.rp->TxHeight-cw.zh+6;
  1266. if(choice<1 || choice>8 || item[itp[choice-1]].art>'L' || item[itp[choice]].art<'F')
  1267.   cprint("Nothing selected.");
  1268. else
  1269. {
  1270. choice--;
  1271. if(lrwp!=8)
  1272.   hst[0]=hst[0]-item[itp[lrwp]].level+item[itp[choice]].level;
  1273. else
  1274.   hst[0]+=item[itp[choice]].level;
  1275. lrwp=(unsigned char)choice;
  1276. sprintf(jj,"OK. '%s' selected as long-range weapon.",item[itp[lrwp]].name);
  1277. cprint(jj);
  1278. }
  1279. break;
  1280. case 6:
  1281. show_items();
  1282. cprint("Select shield.");
  1283. while(!LMB_DRUCK);
  1284. choice=(pm.dbs[1-dbz]->MouseX/160)*4+
  1285. (pm.dbs[1-dbz]->MouseY-cw.yo)/cw.rp->TxHeight-cw.zh+6;
  1286. if(choice<1 || choice>8 || item[itp[choice-1]].art!='S')
  1287.   cprint("Nothing selected.");
  1288. else
  1289. {
  1290. choice--;
  1291. if(sh!=8)
  1292.   ac[0]=ac[0]+item[itp[sh]].level-item[itp[choice]].level;
  1293. else
  1294.   ac[0]-=item[itp[choice]].level;
  1295. sh=(unsigned char)choice;
  1296. sprintf(jj,"OK. '%s' selected as shield.",item[itp[sh]].name);
  1297. cprint(jj);
  1298. }
  1299. break;
  1300. }
  1301. break;
  1302. }
  1303. }
  1304.  
  1305. if(!LMB_DRUCK && (*taste)&1!=1)
  1306.   goto blopp;
  1307.  
  1308. /* >>> Jetzt folgt die Reaktion auf das Klicken der Maus: */
  1309.  
  1310. {
  1311. int x,y,dxx,dyy;
  1312.  
  1313. dxx=0; dyy=0;
  1314. if(!LMB_DRUCK)
  1315. {
  1316. switch((char)*taste)
  1317. {
  1318. case 53:
  1319. obb[1].heat=(unsigned int)sst[0]*5;
  1320. add(ox[0],oy[0],ox[0]+dx[0],oy[0]+dy[0],weapon);
  1321. if(wlk==0)
  1322. {
  1323.   x=sub(ox[0]+dx[0],oy[0]+dy[0],(unsigned int)hst[0]*5);
  1324.   StopSound(ia);
  1325.   ia=StartSound(snd1,40,4000,1);
  1326.   if(x==0)
  1327.     cprint("You miss.");
  1328.   else
  1329.   {
  1330.     if(x>0)
  1331.     {
  1332.       sprintf(jj,"You hit for %d damage points.",x);
  1333.       cprint(jj);
  1334.     }
  1335.   }
  1336. }
  1337. else
  1338. {  
  1339. StopSound(ia);
  1340. ia=StartSound(snd1,64,6000,1);
  1341. }
  1342. goto blopp;
  1343. case 103:
  1344. dyy=-1;
  1345. goto go_;
  1346. case 97:
  1347. dxx=-1;
  1348. goto go_;
  1349. case 99:
  1350. dxx=1;
  1351. goto go_;
  1352. case 101:
  1353. dyy=1;
  1354. goto go_;
  1355. case -47:
  1356. show_items();
  1357. goto blopp;
  1358. case -41:
  1359. take_item(ox[0],oy[0]);
  1360. goto blopp;
  1361. }
  1362. goto blopp;
  1363. }
  1364.  
  1365. x=(int)pm.dbs[1-dbz]->MouseX;
  1366. y=(int)pm.dbs[1-dbz]->MouseY;
  1367.  
  1368. if(x>253 && x<273 && y>18 && y<36) /* Richtungspfeil */
  1369. {
  1370. dyy=-1;
  1371. goto go_;
  1372. }
  1373.  
  1374. if(x>273 && x<289 && y>36 && y<56) /* Richtungspfeil */
  1375. {
  1376. dxx=1;
  1377. goto go_;
  1378. }
  1379.  
  1380. if(x>253 && x<273 && y>58 && y<76) /* Richtungspfeil */
  1381. {
  1382. dyy=1;
  1383. goto go_;
  1384. }
  1385.  
  1386. if(x>236 && x<256 && y>38 && y<56) /* Richtungspfeil */
  1387. {
  1388. dxx=-1;
  1389. goto go_;
  1390. }
  1391.  
  1392. if(x>258 && x<267 && y>38 && y<56)
  1393. {
  1394. obb[1].heat=(unsigned int)sst[0]*5;
  1395. add(ox[0],oy[0],ox[0]+dx[0],oy[0]+dy[0],weapon);
  1396. if(wlk==0)
  1397. {
  1398.   x=sub(ox[0]+dx[0],oy[0]+dy[0],(unsigned int)hst[0]*5);
  1399.   StopSound(ia);
  1400.   ia=StartSound(snd1,40,4000,1);
  1401.   if(x==0)
  1402.     cprint("You miss.");
  1403.   else
  1404.   {
  1405.     if(x>0)
  1406.     {
  1407.       sprintf(jj,"You hit for %d damage points.",x);
  1408.       cprint(jj);
  1409.     }
  1410.   }
  1411. }
  1412. else
  1413. {
  1414.   StopSound(ia);
  1415.   ia=StartSound(snd1,64,6000,1);
  1416. }
  1417. goto blopp;
  1418. }
  1419.  
  1420. if(x>238 && x<258 && y>92 && y<110)
  1421. {
  1422.   /* _____Weapon-Auswahl */
  1423.   if(weapon==1)
  1424.   {
  1425.     weapon=2;
  1426.     cprint("GRANATE activated.");
  1427.     goto blopp;
  1428.   }
  1429.   if(weapon==2)
  1430.   {
  1431.     weapon=1;
  1432.     cprint("STANDARD-LASER activated.");
  1433.     goto blopp;
  1434.   }
  1435.   goto blopp;
  1436. }
  1437.  
  1438. if(x>260 && x<280 && y>92 && y<110)
  1439. {
  1440.   /* Computer-Befehlseingabe: ____weitere Befehle dazu! */
  1441.   cprint("Neuro-II active - COMMAND?");
  1442.   Inline(jj);
  1443.   if(strcmp(jj,"ende")==0)
  1444.     return();
  1445.   if(strcmp(jj,"dbg")==0)
  1446.   {
  1447.     cprint("Which number?");
  1448.     Inline(jj);
  1449.     x=atoi(jj);
  1450.     sprintf(jj,"%d: Z:%d I:%d O:%d H:%d",x,(int)oa[x],(int)oz[x],(int)oll[x],
  1451. (int)oh[x]);
  1452.     cprint(jj);
  1453.     sprintf(jj,"NAME: %s",obb[oll[x]].name);
  1454.     cprint(jj);
  1455.     goto blopp;
  1456.   }
  1457.   goto blopp;
  1458. }
  1459.  
  1460. if(x>282 && x<302 && y>92 && y<110)
  1461. {
  1462. cprint("STATUS:");
  1463. sprintf(jj,"ENERGY:%ld  SST:%d  HST:%d  AC:%d  CREDITS:%ld",(long)heat[0],(int)sst[0],
  1464. (int)hst[0],(int)ac[0],(long)score);
  1465. cprint(jj);
  1466. sprintf(jj,"SRWP: %s",item[itp[srwp]].name);
  1467. cprint(jj);
  1468. sprintf(jj,"LRWP: %s",item[itp[lrwp]].name);
  1469. cprint(jj);
  1470. sprintf(jj,"SHLD: %s",item[itp[sh]].name);
  1471. cprint(jj);
  1472. goto blopp;
  1473. }
  1474.  
  1475. go_:
  1476. if(zeit%oz[0]==0)
  1477. {
  1478. zz=walk(ox[0]+dxx,oy[0]+dyy,0);
  1479. if(wlk!=0)
  1480. {
  1481. switch(zz)
  1482. {
  1483. case 24:
  1484. {
  1485.   register int tafo;
  1486.   tafo=0;
  1487.   while(it[tafo]!=30000)
  1488.   {
  1489.     if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
  1490.     {
  1491.       mesg=&texts[it[tafo]];
  1492.       break;
  1493.     }
  1494.     tafo++;
  1495.   }
  1496. }
  1497. break;
  1498. case 26:
  1499. {
  1500.   cprint("You collect a piece of iridium.");
  1501.   oh[0]=0;
  1502.   addscore(20);
  1503. }
  1504. break;
  1505. case 44:
  1506. if(dy[0]==-1)
  1507. {
  1508.   register int tafo;
  1509.   tafo=0;
  1510.   while(it[tafo]!=30000)
  1511.   {
  1512.     if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
  1513.     {
  1514.       mesg=&texts[it[tafo]];
  1515.       break;
  1516.     }
  1517.     tafo++;
  1518.   }
  1519. }
  1520. break;
  1521. case 45:
  1522. if(dy[0]==1)
  1523. {
  1524.   register int tafo;
  1525.   tafo=0;
  1526.   while(it[tafo]!=30000)
  1527.   {
  1528.     if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
  1529.     {
  1530.       mesg=&texts[it[tafo]];
  1531.       break;
  1532.     }
  1533.     tafo++;
  1534.   }
  1535. }
  1536. break;
  1537. case 46:
  1538. if(dx[0]==1)
  1539. {
  1540.   register int tafo;
  1541.   tafo=0;
  1542.   while(it[tafo]!=30000)
  1543.   {
  1544.     if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
  1545.     {
  1546.       mesg=&texts[it[tafo]];
  1547.       break;
  1548.     }
  1549.     tafo++;
  1550.   }
  1551. }
  1552. break;
  1553. case 47:
  1554. if(dx[0]==-1)
  1555. {
  1556.   register int tafo;
  1557.   tafo=0;
  1558.   while(it[tafo]!=30000)
  1559.   {
  1560.     if(ix[tafo]==ox[0] && iy[tafo]==oy[0])
  1561.     {
  1562.       mesg=&texts[it[tafo]];
  1563.       break;
  1564.     }
  1565.     tafo++;
  1566.   }
  1567. }
  1568. break;
  1569. default:
  1570. insc=0;
  1571. }
  1572. }
  1573. else
  1574. {
  1575.   dx[0]=dxx;
  1576.   dy[0]=dyy;
  1577.   rx[0]=(dx[0]*dx[0]-1)*dy[0];
  1578.   ry[0]=-(dy[0]*dy[0]-1)*dx[0];    
  1579.   oa[0]=ou[0]-dx[0]+1+(dy[0]+1)*dy[0];
  1580.   pic(ox[0],oy[0],oa[0]);
  1581.   nd=-1;
  1582.  
  1583.   switch(zz)
  1584.   {
  1585.     case 5:
  1586.     if(heat[0]<60000)
  1587.     {
  1588.       heat[0]+=5000;
  1589.       show_heat();
  1590.       cprint("Heat sinks as you walk in the cool water.");
  1591.     }
  1592.     break;
  1593.     case 25:
  1594. {
  1595.   register int tafo;
  1596.   tafo=0;
  1597.   if(insc==0)
  1598.   {
  1599.   while(tafo<tafel)
  1600.   {
  1601.     if(ix[tafo]==ox[0]+dxx && iy[tafo]==oy[0]+dyy)
  1602.     {
  1603.       mesg=&texts[it[tafo]];
  1604.       break;
  1605.     }
  1606.     tafo++;
  1607.   }
  1608.   if(tafo>=tafel)
  1609.     cprint("You feel that once there must have been an inscription right here!");
  1610.   insc=1;
  1611.   }
  1612.   else
  1613.     insc=1;
  1614. }
  1615.   break;
  1616.   case 28:
  1617.   if((*(pm.playbeg+ox[0]+(dxx*2)+(oy[0]+(dyy*2))*pm.b))&127==0)
  1618.   {
  1619.     pic(ox[0]+dxx*2,oy[0]+dyy*2,28);
  1620.     pic(ox[0]+dxx,oy[0]+dyy,0);
  1621.     walk(ox[0]+dxx,oy[0]+dyy,0);
  1622.   }
  1623.   else
  1624.   {
  1625.   if((*(pm.playbeg+ox[0]+(dxx*2)+(oy[0]+(dyy*2))*pm.b))&127==29)
  1626.   {
  1627.     pic(ox[0]+dxx*2,oy[0]+dyy*2,30);
  1628.     pic(ox[0]+dxx,oy[0]+dyy,0);
  1629.     walk(ox[0]+dxx,oy[0]+dyy,0);
  1630.     addscore(200);
  1631.     cprint("BONK - you have pushed the crate into the hole.");
  1632.   }
  1633.   }
  1634.   break;
  1635.   case 38:
  1636. {
  1637.   int x11,y11,x22,y22;
  1638.   register int xxx,yyy;
  1639.   int ccount=0;
  1640.  
  1641.   cprint("A robot voice declares: 'Just checking if you have really delivered all the crates...'");
  1642.   xxx=ox[0]+dxx; yyy=oy[0]+dyy;
  1643.   while((*(pm.playbeg+xxx+yyy*pm.b))&127!=31) xxx++;
  1644.   x22=xxx; y22=yyy; yyy--;
  1645.   while((*(pm.playbeg+xxx+yyy*pm.b))&127!=31) yyy--;
  1646.   y11=yyy; xxx--;
  1647.   while((*(pm.playbeg+xxx+yyy*pm.b))&127!=31) xxx--;
  1648.   x11=xxx;
  1649.   for(xxx=x11;xxx<=x22;xxx++)
  1650.     for(yyy=y11;yyy<=y22;yyy++)
  1651.     {
  1652.       if((*(pm.playbeg+xxx+yyy*pm.b))&127==29) ccount++;
  1653.     }
  1654.   if(ccount==0)
  1655.   {
  1656.     cprint("'Congratulations. Your way to the next level won't be blocked any more...'");
  1657.     pic(ox[0]+dxx,oy[0]+dyy,0);
  1658.     cprint("With a flash of lightning, the 'checkport' vanishes and leaves +5000 credits behind.");
  1659.     addscore(5000);
  1660.   }
  1661.   else
  1662.   {
  1663.     sprintf(jj,"'Sorry, there are still %d holes left.'",ccount);
  1664.     cprint(jj);
  1665.   }
  1666. }
  1667.   break;
  1668.   case 67:
  1669.   cprint("The laser-door opens...");
  1670.   add(ox[0],oy[0],ox[0]+dx[0],oy[0]+dy[0],7);
  1671.   StopSound(ia);
  1672.   ia=StartSound(snd2,30,20000,1);
  1673.   break;
  1674. }
  1675. }
  1676. }
  1677. }
  1678.  
  1679. goto blopp; 
  1680. }
  1681.  
  1682. main(argc,argv)
  1683. int argc;
  1684. char *argv[];
  1685. {
  1686. int fd;
  1687.  
  1688. InitFuncs();
  1689. palette(0,0,0,0,0);
  1690. /* palette(0,1,0,0,0); */
  1691. palette(0,2,0,0,0);
  1692. palette(0,3,0,0,0);
  1693. scropen(2," ",4,320,200,6);
  1694. ScreenToFront(scr[0]);
  1695. readiff("presents.ham",2);
  1696. ScreenToFront(scr[2]);
  1697. Delay(250L);
  1698. ScreenToFront(scr[0]);
  1699. readiff("sunset.ham",2);
  1700. ScreenToFront(scr[2]);
  1701. Delay(300L);
  1702. /* Hier käme auch noch der andere Titel */
  1703. scrclose(2);
  1704. InitPlay("MF.iff","FPM.iff",10,200,100,160,160);
  1705. loadfont(2,"flow.font",8);
  1706. SetFont(pm.dbr[1-dbz],ff[2]);
  1707. SetFont(pm.dbr[dbz],ff[2]);
  1708. cw.rp=pm.dbr[1-dbz];
  1709. cprint("        >>> MechFight ");
  1710. cprint("1990 by Florian Marquardt");
  1711. cprint("        Jagdschloss Hirschbrunn");
  1712. cprint("        8861 Dornstadt-Auhausen D");
  1713. cprint(" ");
  1714. snd1=LoadSound("laser.snd");
  1715. snd2=LoadSound("expl.snd");
  1716. ia=StartSound(snd1,0,6000,1);
  1717. texts=gme(TEXTBUF,(long)MEMF_CLEAR);
  1718. LadeAlles("MF");
  1719.  
  1720. Game();
  1721.  
  1722. fme(texts,TEXTBUF);
  1723. StopSound(ia);
  1724. FreeSound(snd1);
  1725. FreeSound(snd2);
  1726. ClosePlay();
  1727. palette(0,0,5,5,5);
  1728. palette(0,1,15,15,15);
  1729. palette(0,2,0,0,0);
  1730. palette(0,3,10,0,0);
  1731. CloseFuncs();
  1732. }
  1733.